"""
管理员视图层
"""
import logging

from interface import admin_interface, shop_interface
from lib.common import loop_input


def change_balance():
    """修改余额"""
    while True:
        # 打印所有用户
        username_list = admin_interface.list_all_user_interface('balance')
        # 输入用户名
        username = loop_input(
            '请输入要修改余额的用户名（输入q退出）:', '该用户不存在,请重新输入！',
            lambda x, username_list: True if x in username_list else x == 'q',
            username_list
        )
        if username == 'q':
            print('退出修改余额功能！')
            return
        # 输入余额
        amount = float(loop_input(
            '请修改后的余额:', '输入必须为大于等于0的数字,请重新输入！',
            lambda x: 0 <= float(x) if x.isdigit() else False,
        ))
        # 调用修改余额接口
        admin_interface.change_balance_interface(username, amount)


def check_user_flow():
    """查看用户流水"""
    while True:
        # 打印所有用户
        username_list = admin_interface.list_all_user_interface()
        # 输入用户
        username = loop_input(
            '请输入要查看的用户名（输入q退出）:', '该用户不存在,请重新输入！',
            lambda x, username_list: True if x in username_list else x == 'q',
            username_list
        )
        if username == 'q':
            print('退出修改查看流水！')
            return
        # 调用查看用户流水接口
        admin_interface.check_user_flow_interface(username)
        input('按回车继续...')


def lock_user():
    """锁定/解锁用户"""
    while True:
        # 打印所有用户
        username_list = admin_interface.list_all_user_interface('locked')
        # 输入用户
        username = loop_input(
            '请输入需要锁定/解锁的用户名（输入q退出）:', '该用户不存在,请重新输入！',
            lambda x, username_list: True if x in username_list else x == 'q',
            username_list
        )
        if username == 'q':
            print('退出修改用户锁定功能')
            return
        # 调用用户锁定接口
        admin_interface.lock_user_interface(username)
        input('按回车继续...')


def inventory_management():
    """库存管理"""
    while True:
        # 打印商品库存
        goods_info = shop_interface.goods_list_interface()
        # 选择商品
        goods_no = loop_input(
            '请输入要管理的商品编号(按q退出):',
            '没有此商品，请重新输入！',
            lambda x, list_len: 0 < int(x) <= list_len if x.isdigit() else x == 'q',
            len(goods_info)
        )
        if goods_no == 'q':
            print('退出库存管理！')
            return
        # 通过编号获取商品名
        goods_name = shop_interface.get_goods_through_no(goods_info, goods_no)
        # 输入修改的库存数量
        goods_num = int(loop_input(
            '请输入修改后的库存数量:',
            '输入必须为数字，请重新输入！',
            lambda x: 0 <= int(x) if x.isdigit() else False,
        ))
        # 调用库存管理接口
        admin_interface.inventory_management_interface(goods_info, goods_name, goods_num)


def add_goods():
    """添加商品"""
    # 打印商品
    goods_info = shop_interface.goods_list_interface()
    # 输入商品名
    goods_name = loop_input('请要添加的商品名称(按q退出):', '商品已存在！请使用后库存管理功能！',
                            lambda x: x not in goods_info)
    if goods_name == 'q':
        print('退出添加商品！')
        return
    # 输入价格
    goods_price = float(loop_input(
        '请输入商品价格:',
        '输入必须为数字，请重新输入！',
        lambda x: 0 <= float(x) if x.isdigit() else False,
    ))
    # 输入库存数量
    goods_num = int(loop_input(
        '请输入商品的库存数量:',
        '输入必须为数字，请重新输入！',
        lambda x: 0 <= int(x) if x.isdigit() else False,
    ))
    admin_interface.add_goods_interface(goods_info, goods_name, goods_price, goods_num)

    # 打印商品
    shop_interface.goods_list_interface()


def delete_goods():
    """删除商品"""
    # 打印商品
    goods_info = shop_interface.goods_list_interface()
    # 选择商品编号
    goods_no = loop_input(
        '请输入要删除的商品编号(按q退出):',
        '没有此商品，请重新输入！',
        lambda x, list_len: 0 < int(x) <= list_len if x.isdigit() else x == 'q',
        len(goods_info)
    )
    if goods_no == 'q':
        print('退出商品选购！')
        return
    # 通过编号获取商品名
    goods_name = shop_interface.get_goods_through_no(goods_info, goods_no)
    # 调用删除商品接口
    admin_interface.delete_goods_interface(goods_info, goods_name)

    # 打印商品
    shop_interface.goods_list_interface()


src_dict = {
    '1': change_balance,
    '2': check_user_flow,
    '3': lock_user,
    '4': inventory_management,
    '5': add_goods,
    '6': delete_goods,
    'q': exit
}


def run(user_dict):
    while True:
        print("欢迎使用 ATM + 购物车 系统".center(40, '*'))
        print("1.修改用户余额".center(40))
        print("2.查看用户流水".center(40))
        print("3.锁定用户".center(40))
        print("4.库存管理".center(40))
        print("5.添加商品".center(40))
        print("6.删除商品".center(40))
        print(f" 当前管理员:{user_dict['username']} ".center(40, '*'))
        # 输入选项
        order = input('请选择功能（输入q退出系统 logout退出登录）:').strip()
        # 退出登录
        if order == 'logout':
            print(f"管理员{user_dict['username']}退出登录")
            logging.getLogger(__name__).info(f"管理员{user_dict['username']}退出登录")
            return
        # 输入错误
        if not src_dict.get(order):
            print('输入的选项不存在，请重新输入！')
            continue
        # 调用功能
        src_dict[order]()

        input('按回车继续...')
